/**
 * Copyright (c) 2024,  科泰集团教研团队
 * 版权所有，请勿侵权
 */
package com.ktjiaoyu.ktmall.utils;


import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @author 科泰集团教研团队
 * @version 1.0.0
 * @packageName com.ktjiaoyu.news.utils
 * @fileName DatabaseUtil.java
 * @createTime 2024/11/29 16:26
 * @lastModify 2024/11/29 16:26
 */
public class DatabaseUtil {

    // 将数据源定义为静态对象
    private static DataSource dataSource;

    static{
        // 初始化数据源
        initDataSource();
    }

    public static void initDataSource(){
        // 同样读取配置文件
        InputStream is = DatabaseUtil.class.getClassLoader()
                .getResourceAsStream("database.properties");
        Properties props = new Properties();
        try {
            // 加载配置
            props.load(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            // 使用Druid提供的工厂加载配置，创建数据库连接池
            dataSource = DruidDataSourceFactory.createDataSource(props);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过数据源获取连接对象
     * @return
     */
    public static Connection getConnection(){
        try {
            // 如果外部未传入连接，则使用一次性的连接
            return dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 关闭所有资源
     * @param conn
     * @param stmt
     * @param rs
     */
    public static void closeAll(Connection conn, Statement stmt, ResultSet rs){
        try {
            if(rs != null && !rs.isClosed()){
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(stmt != null && !stmt.isClosed()){
                stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn != null && !conn.isClosed()){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
